/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package geometria;

/**
 *
 * @author 1-DAM
 */
public class Poligono {
    private static final double PI=3.14159264;
    private double longlado, perimetro, area;
    private double angulo;
    // necesitamos saber la apotema o el radio para saber el ángulo, así que lo sacamos por numero de lados
    // dividimos 360º entre el numero de lados, y sacamos lo que vale el ángulo de los triángulos en los que 
    // se divide el polígono regular, ahora lo dividimos entre 2, y tenemos un triangulo con cateto menor l/2;
    // apotema = cateto mayor, hipotenusa=radio de la circunferencia circunscrita del polígono 

    private double apotema = 0;
    private int nlados;
    private boolean control=true;

    // constructor sin y con parametros
    
    /**
     *
     */
    public Poligono()
    {
    }

    // constructor con parametros numero de lados y long del lado
    
    /**
     *
     * @param nlados
     * @param longlado
     */
    public Poligono (int nlados, double longlado)
    {
        setNlados (nlados);
        setLonglado (longlado);
        CalculaAngulo ();
        CalculaPerimetro();
        CalculaApotema();
        CalculaArea();
    }

    // constructor con parametros long de apotema y numero de lados y control booleano

    /**
     *
     * @param nlados
     * @param apotema
     * @param control
     */
    public Poligono (int nlados, double apotema, boolean control)
    {
        setNlados (nlados);
        setApotema (apotema);
        CalculaAngulo ();
        CalculaLonglado();
        CalculaPerimetro();
        CalculaArea();
    }

    
    /**
     * @return the nlados
     */
    public int getNlados() {
        return nlados;
    }

    /**
     * @param nlados the nlados to set
     */
    public void setNlados(int nlados) {
        this.nlados = nlados;
    }
    
    
    
    
    /**
     * @return the longlado
     */
    public double getLonglado() {
        return longlado;
    }

    /**
     * @param longlado the longlado to set
     */
    public void setLonglado(double longlado) {
        this.longlado = longlado;
    }

    
    /**
     *
     */
    public void CalculaLonglado()
    {

        setLonglado(getApotema()*2*Math.abs(Math.tan(getAngulo()/2)));
    }        
    
    /**
     * @return the angulo
     */
    public double getAngulo() {
        return angulo;
    }

    /**
     * @param angulo the angulo to set
     */
    public void setAngulo(double angulo) {
        this.angulo = angulo;
    }

    /**
     *
     */
    public void CalculaAngulo ()
    {
        setAngulo(2*PI/getNlados());
    }
    
    
    /**
     * @return the apotema
     */
    public double getApotema() {
        return apotema;
    }

    /**
     * @param apotema the apotema to set
     */
    public void setApotema(double apotema) {
        this.apotema = apotema;
    }

    /**
     *
     */
    public void CalculaApotema ()
    {
          setApotema((getLonglado()/2)/(Math.abs(Math.tan(getAngulo()/2))));
    
    }

// perimetro =lado*nlados
    
     /**
     * @return the perimetro
     */
    public double getPerimetro() {
        return perimetro;
    }

    /**
     * @param perimetro the perimetro to set
     */
    public void setPerimetro(double perimetro) {
        this.perimetro = perimetro;
    }

    /**
     *
     */
    public void CalculaPerimetro ()
    {
        //setPerimetro(getLonglado()*getNlados());
        int n=getNlados();
        double contador=0D;
        for (int i=1;i<=n;i++){
            contador=contador+getLonglado();
        }
        setPerimetro(contador);
        
    }
    
 
    
// area=Perim*apot/2
    
    
    /**
     * @return the area
     */
    public double getArea() {
        return area;
    }

    /**
     * @param area the area to set
     */
    public void setArea(double area) {
        this.area = area;
    }


    /**
     *
     */
    public void CalculaArea()
    {
        setArea(getPerimetro()*getApotema()/2);   
    }

    /**
     *
     */
    public void MostrarDatos()
    {
        System.out.println("Nº lados = "+ getNlados());
        System.out.println("Long. lado = "+ getLonglado());
        System.out.println("Angulo de cada triangulo que lo formaría = "+ getAngulo());
        System.out.println("Perímetro = "+ getPerimetro());
        System.out.println("Apotema = "+ getApotema());
        System.out.println("Area = "+ getArea()+"\n");
    }
}    
   